package com.withyou.design_pattern.creative_design_pattern.singleton_design_pattern;

/**
 * 分类：
 *      创建型设计模式：用户创建单例对象,运行时环境对于目标类只会产生一个对象
 * 特点：
 *      饱汉设计模式：延迟创建对象（用的时候创建，避免对象膨胀），但需要解决多线程情况下的安全问题
 *      饱汉模式非线程安全的。
 *
 * 优缺点：
 *      好处：延时加载，用的时候才会生产对象。
 *      缺点：需要保证同步，付出效率的代价。
 *
 *　FullMan_Synchronized_Design_Pattern：饱汉设计模式
 *
 *  实现：DCL
 *
 *  原理：
 *       1、synchronized 控制并发
 *       2、volatile 禁止指令重排序
 */
public class FullMan_Synchronized_DCl_Design_Pattern {

    private volatile static FullMan_Synchronized_DCl_Design_Pattern singleton = null;

    private FullMan_Synchronized_DCl_Design_Pattern(){}

    public static FullMan_Synchronized_DCl_Design_Pattern getInstance(){
        if(singleton == null){
            synchronized (FullMan_Synchronized_DCl_Design_Pattern.class){
                if (singleton == null){
                    singleton = new FullMan_Synchronized_DCl_Design_Pattern();
                }
            }
        }
        return singleton;
    }



}
